import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';

import '../../flutter_common_ui.dart';

/// SVG图标组件 封装夜间模式
/// 如果图标颜色是主色就在svg文件上面添加 fill="currentcolor" 会被SvgTheme 替换成主题色
///
/// 获取svg 转成 picture 或者 image 用于canvas 绘制
///  final aa = await vg.loadPicture(SvgAssetLoader("assets/images/home/home_icon_1.svg"), context);
//                aa.picture;
class SvgWidget extends StatelessWidget {
  final String url; // SVG图标的路径,可以本地，可以网络
  final double? width; // 图标的宽度
  final double? height; // 图标的高度
  final BoxFit fit;
  final ColorFilter? colorFilter; // 颜色过滤器，可以设置图标颜色
  final Color? color; // 颜色过滤器，可以设置图标颜色
  final Color? currentColor; // 替换svg  currentColor颜色

  const SvgWidget(
    this.url, {
    super.key,
    this.width,
    this.height,
    this.fit = BoxFit.contain,
    this.colorFilter,
    this.color,
    this.currentColor,
  });

  @override
  Widget build(BuildContext context) {
    // LogUtils.d("SvgWidget build $url");
    var isLocal = false;
    var urlResult = url;
    if (url.startsWith("assets")) {
      isLocal = true;
      urlResult = AssetsUtils.convertPath(urlResult);
    } else if (url.startsWith("http://") || url.startsWith("https://")) {
      isLocal = false;
    }
    final colorFilterX = colorFilter ?? (color == null ? null : ColorFilter.mode(color!, BlendMode.srcIn));
    //这个可以自动取反色，多种颜色的也可以，适合夜间模式
    // ColorFilter.matrix([
    //   -1, 0, 0, 0, 255, // Red
    //   0, -1, 0, 0, 255, // Green
    //   0, 0, -1, 0, 255, // Blue
    //   0, 0, 0, 1, 0, // Alpha
    // ]);
    return isLocal
        ? SvgPicture.asset(
            urlResult,
            width: width,
            height: height,
            theme: SvgTheme(currentColor: currentColor ?? Theme.of(context).primaryColor),
            fit: fit,
            colorFilter: colorFilterX,
          )
        : SvgPicture.network(
            urlResult,
            width: width,
            height: height,
            theme: SvgTheme(currentColor: currentColor ?? Theme.of(context).primaryColor),
            fit: fit,
            colorFilter: colorFilterX,
          );
  }
}
